iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0
Web 3

以 Python 進入以太坊虛擬機 (EVM) 的幻想境界系列 第 5

虛擬境界 5:控制流 Flow

  • 分享至 

  • xImage
  •  

在這一章中,我們將介紹 EVM 中的控制流指令,包括 JUMP、JUMPI、PC、MSIZE 和 JUMPDEST。

#
# Memory, Storage and Flow Operations
#

JUMP = 0x56
JUMPI = 0x57
PC = 0x58
MSIZE = 0x59
JUMPDEST = 0x5B

JUMP 指令概述

JUMP 指令用於無條件跳轉到指定位置執行程式碼。它將程式計數器(Program Counter,簡稱 PC)設置為指定的位置,從而改變程式的執行流程。

def jump(self, position):
    # 跳轉到指定位置
    self.evm.pc = position

JUMPI 指令概述

JUMPI 指令用於有條件地跳轉到指定位置執行程式碼。它會從堆疊中取出兩個值,如果第一個值為非零,則將程式計數器設置為第二個值指定的位置。

def jumpi(self, jump_position, condition):
    # 如果條件滿足,則跳轉到指定位置
    if condition:
        self.evm.pc = jump_position

PC 和 MSIZE 指令概述

  • PC 指令:PC 指令將當前程式計數器的值推送到堆疊中。
def pc(self):
    # 將當前程式計數器的值推送到堆疊
    self.evm.stack.append(self.evm.pc)
  • MSIZE 指令:MSIZE 指令將當前堆疊的大小推送到堆疊中。
def msize(self):
    # 將堆疊的大小推送到堆疊
    self.evm.stack.append(len(self.evm.stack))

JUMPDEST 指令概述

JUMPDEST 指令用於標記程式碼的目標位置,並在程式執行時被 JUMP 和 JUMPI 指令使用。

class EVM:
    # ... 其他程式碼 ...

    def jumpdest(self):
        # 標記目標位置
        pass

在這一章中,我們介紹了 EVM 控制流指令,包括 JUMP、JUMPI、PC、MSIZE、GAS 和 JUMPDEST。這些指令控制程式的執行流程,並影響程式計數器和堆疊。接下來,我們將繼續擴充你的 EVM 功能,如果有任何疑問,請隨時提問!


上一篇
虛擬境界 4:Stack (DUP & SWAP)
下一篇
虛擬境界 6:停止和算術指令
系列文
以 Python 進入以太坊虛擬機 (EVM) 的幻想境界30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言